home *** CD-ROM | disk | FTP | other *** search
/ BBS Toolkit / BBS Toolkit.iso / ezy_comm / ezy1023.zip / EKIT102.ZIP / STRUCT.C < prev    next >
Text File  |  1992-11-12  |  56KB  |  1,498 lines

  1. /********************************************************************
  2.  * EzyCom structures converted to C format V1.02 9/9/92
  3.  * by Peter Davies and Ron Clark
  4.  * Based on original C Structures for Ezycom V1.00 by Colin Berg
  5.  *
  6.  * These structures may ONLY be used in accordance with those
  7.  * agreements laid out in the Official Ezycom Structures.
  8.  * Peter Davies or Ron Clark takes no responsibility whatsoever
  9.  * for the correctness of these structures.
  10.  *
  11.  * If, you find any faults please notify me of them.
  12.  *
  13.  * Please refer to the pascal structures for more explanation, before
  14.  * querying me
  15.  *
  16.  ********************************************************************/
  17.  
  18. #define  EZYVER     "1.02"
  19. #define  VERSIONHIGH   1
  20. #define  VERSIONLOW    2
  21. #define  PRODNAME   "Ezycom"
  22. #define  COPYRIGHT  "Peter Davies"
  23. #define  MAXFREE     685
  24. #define  USERFREE      4
  25. #define  CONSTANTFREESPACE 89
  26. #define  CONSTANTFILEFREESPACE 816
  27. #define  MAXNODES    128
  28. #define  MAXAKA       16
  29. #define  MAXMESS    1024
  30. #define  MAXMESSALL 1024
  31. #define  MAXFILES    400
  32. #define  MAXBAUDREC   11
  33.  
  34. /****** Take Note ********************************************************
  35. Boolean can be defined as a Char value under C or as an enum with a
  36. true/false value under C++ (if compiled with enum to char switch)
  37. WARNING: Make sure that you don't have another header which defines Boolean
  38. **************************************************************************/
  39. /* typedef char Boolean; */
  40.  
  41. /* The following can also be defined as enum under C++ */
  42. typedef char AskType;          /* 0=yes, 1=no, 2=ask */
  43. typedef char PhoneType;        /* 0=business, 1=data, 2=nophone */
  44. typedef char MsgType;          /* 0=localmail, 1=netmail, 2=echomail, 3=passthru, 4=waitthru, 5=allmail */
  45. typedef char MsgKindsType;     /* 0=public, 1=private, 2=private or public */
  46. typedef char ShowFileSizeType; /* 0=nosize, 1=size in bytes, 2=size in kbytes */
  47.  
  48. /* Swapping Types : 0=None, 1=Ems, 2=Xms, 3=Disk, 4=EmsXms, 5=XmsEms */
  49.  
  50. typedef unsigned char MaxStr[256];
  51. typedef unsigned char UserString[36];
  52. typedef unsigned char Date[9];
  53. /* typedef unsigned char Str3[4]; */
  54. typedef unsigned char Str8[9];
  55. /* typedef unsigned char Str30[31]; */
  56. typedef unsigned char FlagType[4];
  57. typedef unsigned char PathString[61];
  58.  
  59. /*************************************************************************
  60.  * Datetime record as defined under Turbo Pascal
  61.  *************************************************************************/
  62. typedef struct DATETIME
  63. {
  64.     unsigned int year,
  65.                  month,
  66.                  day,
  67.                  hour,
  68.                  min,
  69.                  sec;
  70. }DATETIME;
  71.  
  72. typedef struct DATERECORD
  73. {
  74.     unsigned int  year;
  75.     unsigned char month,
  76.                   day;
  77. }DATERECORD;
  78.  
  79. typedef struct ONOFFFLAGS
  80. {
  81.     FlagType      onflags;
  82.     FlagType      offflags;
  83. }ONOFFRECORD;
  84.  
  85. typedef struct NETRECORD
  86. {
  87.     unsigned int  zone,
  88.                   net,
  89.                   node,
  90.                   point;
  91. }NETRECORD;
  92.  
  93. /********************************************************************
  94.  * USERS.BBS record structure
  95.  *
  96.  *     attribute bit 0 : deleted
  97.  *               bit 1 : clear screen
  98.  *               bit 2 : more prompt
  99.  *               bit 3 : ansi capable
  100.  *               bit 4 : don't kill user
  101.  *               bit 5 : file points ignore
  102.  *               bit 6 : full screen ed
  103.  *               bit 7 : quiet mode
  104.  *
  105.  *    attribute2 bit 0 : ignore file ratios
  106.  *               bit 1 : extended ibm characters
  107.  *               bit 2 : on = mmddyy off = ddmmyy
  108.  *               bit 3 : ignore paging hours
  109.  *               bit 4 : exclude user
  110.  *               bit 5 : avatar capable
  111.  *               bit 6 : ignore menu time restrictions
  112.  *               bit 7 : ignore message ratios
  113.  *
  114.  *    attribute3 bit 0 : do not sound page
  115.  *                   1 : page on logon
  116.  *                   2 : hold mailbox
  117.  *                   3 : use combined mailbox
  118.  *                4..7 : Reserved
  119.  *
  120.  *    attribute4 bit 0..7 reserved
  121.  ********************************************************************/
  122. typedef struct USERSRECORD
  123. {
  124.     UserString    name,                   /* Users Name */
  125.                   alias;                  /* Users Alias */
  126.     unsigned char password[16];           /* Users Password */
  127.     unsigned int  security;               /* Users SecLvl */
  128.     unsigned char attribute,              /* See Type Comment */
  129.                   attribute2,             /* See Type Comment */
  130.                   attribute3,             /* See Type Comment */
  131.                   attribute4;             /* See Type Comment */
  132.     FlagType      flags;                  /* Users Access Flags */
  133.     unsigned char dataphone[15],          /* Users Data Phone No: */
  134.                   voicephone[15];         /* Users Voice Phone No: */
  135. } USERSRECORD;
  136.  
  137.  
  138. /********************************************************************
  139.  * USERSEXT.BBS record structure
  140.  *
  141.  * colour?_? : To retrieve the first colour  " && 15 "
  142.  *             To retrieve the second colour " >> 4  "
  143.  ********************************************************************/
  144. typedef struct USERSEXTRARECORD
  145. {
  146.     unsigned char location[26];              /* Users Location */
  147.     long int      lasttimedate;              /* (Dos packed) Last Login Date Time */
  148.     unsigned int  credit,                    /* Netmail Credit */
  149.                   pending;                   /* Netmail Points Pending */
  150.     unsigned int  msgsposted,                /* Msgs posted */
  151.                   nocalls,                   /* Times Called */
  152.                   uploads,                   /* Users Uploads (Files) */
  153.                   todayk,                    /* K's Downloaded today */
  154.                   timeused,                  /* Time Used today */
  155.                   downloads;                 /* Users Downloads (Files) */
  156.     long int      uploadsk,                  /* Kilobytes Uploaded */
  157.                   downloadsk;                /* Kilobytes Downloaded */
  158.     unsigned char screenlength,              /* Users Screen Length */
  159.                   lastpwdchange;             /* Logons since password last changed */
  160.     unsigned int  timebanked,                /* Time banked by user */
  161.                   ksbanked,                  /* Kilobytes banked by user */
  162.                   filepoints;                /* Filepoints remaining */
  163.     unsigned char qwkcompression,            /* QWK Compression Type */
  164.                   qwkdaysold;                /* QWK Days old to pack mail */
  165.     unsigned char comment[41];               /* Sysops comment about user */
  166.     unsigned char colour1_2,                 /* Message\File area colors */
  167.                   colour3_4,                 /* Message\File area colors */
  168.                   colour5_6,                 /* Message\File area colors */
  169.                   colour7_8,                 /* Message\File area colors */
  170.                   bkcolour;                  /* Message\File area colors */
  171.     unsigned char sessionfailures;           /* Number of Session Failures */
  172.      unsigned char topmenu[9];                /* Name of Top Menu to show to user */
  173.     unsigned int  filepointsgiven;           /* File Points given since last session */
  174.     DATERECORD    dateofbirth;               /* Users date of birth */
  175.     unsigned char groups[4];                 /* User Groups */
  176.     unsigned int  regodate,                  /* Users Registration date */
  177.                   firstdate,                 /* Date of first logon */
  178.                   lastfiledate;              /* Date of last New files listing */
  179.     char          defprotocol;               /* Blank = NO protocol defined */
  180.     unsigned int  timeleft;                  /* Users time left today */
  181.     unsigned int  filearea;                  /* Last file area accessed by user */
  182.     unsigned int  messarea;                  /* Last message area access by user */
  183.     long int      qwkmaxmsgs;                /* Maximum Msgs for QWK Pkt */
  184.     unsigned char qwkmaxmsgsperarea;         /* Maximum Msgs per area */
  185.     signed int    todaybankwk;               /* Kilobytes withdrawn/deposit today */
  186.     unsigned char fordwardto;                /* Who to Forward Msgs to */
  187.     unsigned char todaycalls;                /* Number of Calls today */
  188.     signed int    todaybankwt;               /* Minutes withdrawn/deposit today */
  189.     char          extraspace[USERFREE];      /* For future expansion */
  190. } USERSEXTRARECORD;
  191.  
  192. /********************************************************************
  193.  * LASTCOMB.BBS record structure
  194.  * This file grows and shrinks for EACH User depending on the
  195.  * number of message areas defined in the configuration
  196.  ********************************************************************/
  197. typedef struct USERSLASTRECORD
  198. {
  199.     unsigned int  combinedinfo;
  200.     unsigned int  lastreadinfo[16];
  201. } USERSLASTRECORD;
  202.  
  203. /********************************************************************
  204.  * *.MNU record structure
  205.  *
  206.  * attribute bit 0 : test ratio kb's
  207.  *           bit 1 : test message/call ratio
  208.  *           bit 2 : test age <config age> and over
  209.  *           bit 3 : test ratio files
  210.  *           bit 4 : local keyboard
  211.  *            5..7 : [ reserved ]
  212.  *
  213.  * securityattr  0 : greater than or equal to
  214.  *               1 : greater than
  215.  *               2 : less than or equal to
  216.  *               3 : less than
  217.  *               4 : equal to
  218.  *               5 : not equal to
  219.  ********************************************************************/
  220. typedef struct MNURECORD
  221. {
  222.     unsigned char typ;              /* Menu option number */
  223.     unsigned int  security;         /* SecLvl required to access option */
  224.     FlagType      flags;            /* Flags required to access option */
  225.     unsigned char display[91];      /* String to display to user, ";" = no display */
  226.     char          hotkey;           /* Ctrl-A means Automatic Option */
  227.     unsigned char miscdata[91];     /* Misc data field */
  228.     unsigned char colour;           /* Display Colour */
  229.     unsigned char securityattr;     /* Security Testing Condition */
  230.     unsigned char timeonline;       /* Minutes before user can access option */
  231.     unsigned int  timestart;        /* Time for option to become active */
  232.     unsigned int  timeend;          /* Time option is no longer active */
  233.     long int      baudrate;         /* minimum baudrate to use option */
  234.      unsigned int  filepoints;       /* minimum filepoints to use option */
  235.     unsigned char attribute;        /* See Type Comment */
  236.     unsigned char node;             /* Nodes which can access option (0=All) */
  237. } MNURECORD;
  238.  
  239. /********************************************************************
  240.  * PROTOCOL.EZY record structure
  241.  *
  242.  * attribute bit 0 : enable/disable
  243.  *           bit 1 : batch protocol
  244.  *           bit 2 : [ reserved ]
  245.  *           bit 3 : both directions
  246.  *           bit 4 : up/down
  247.  *           bit 5 : bidirectional (ONLY Works on Uploads)
  248.  *            6..7 : [ reserved ]
  249.  ********************************************************************/
  250. typedef struct PROTOCOLRECORD
  251. {
  252.     unsigned char name[16];                /* Protocol name to be displayed */
  253.     char          activekey;               /* Hotkey which selects protocol */
  254.     unsigned char attribute;               /* See Type Comments */
  255.     PathString    logfilename,             /* eg: Dsz logfile */
  256.                   ctlfilename,             /* Protocol control file name */
  257.                   dnctlstring;             /* String used by prot to indicate batch list */
  258.     unsigned char dncmdstring[101],        /* Download command string */
  259.                   upcmdstring[101];        /* Upload command string */
  260.     unsigned char uplogkeyword[11],        /* Upload Key in Log */
  261.                   dnlogkeyword[11],        /* Download Key in Log */
  262.                   uperrkeyword[11],        /* Upload Error Key in Log */
  263.                   dnerrkeyword[11],        /* Download Error Key in Log */
  264.                   uperr2keyword[11],       /**/
  265.                   dnerr2keyword[11];       /**/
  266.     unsigned char xfernamewordnum,         /**/
  267.                   xfercpswordnum;          /**/
  268.     unsigned int  security;                /* SecLvl required to use this protocol */
  269.     FlagType      flags;                   /* Flags required to use this protocol */
  270.     unsigned char efficiency;              /* Protocols efficiency percentage */
  271. } PROTOCOLRECORD;
  272.  
  273. /********************************************************************
  274.  * CONFIG.<EZY or NODE> structure
  275.  *
  276.  * unknownarea = 0 - kill messages
  277.  *               1 - make a new echomail area
  278.  *               2 - make a new passthru area
  279.  *
  280.  * tossattr2 = bit 0 - [ reserved ]
  281.  *                 1 - [ reserved ]
  282.  *                 2 - kill bad archives
  283.  *                 3 - arcmail 0.6 compat
  284.  *
  285.  * autodetect = bit 0 - Auto Detect Ansi
  286.  *                  1 - Ansi Detect for New User
  287.  *                  2 - Auto Detect Emsi
  288.  *                  3 - auto detect emsi & for newuser
  289.  *
  290.  * tossattr = bit 0 : [reserved]
  291.  *                1 : [reserved]
  292.  *                2 : [reserved]
  293.  *                3 : dupe detection
  294.  *                4 : delete netmail on import
  295.  *                5 : keep echoarea node receipts
  296.  *                6 : allow message rescan
  297.  *                7 : [reserved]
  298.  *
  299.  * multitasker = 0 = do not detect or use any multitasker
  300.  *               1 = auto-detect
  301.  *               2 = desqview (or compatiable)
  302.  *               3 = double dos
  303.  *               4 = OS.2
  304.  *               5 = multidos plus
  305.  *               6 = Taskview
  306.  *               7 = Topview
  307.  *               8 = PC MOS
  308.  *               9..255 [reserved]
  309.  *
  310.  * printerport = 0 = LPT1
  311.  *               1 = LPT2
  312.  *               2 = LPT3
  313.  *               3 = COM1
  314.  *               4 = COM2
  315.  *               5 = COM3
  316.  *               6 = COM4
  317.  ********************************************************************/
  318. typedef struct CONFIGRECORD
  319. {
  320.     unsigned char version[9],
  321.                   deflanguage[9],
  322.                   freespace50[68],
  323.                   logpath[61],
  324.                   textpath[61],
  325.                   menupath[61],
  326.                   mnurampath[61],
  327.                   netmailpath[61],
  328.                   nodelistpath[61],
  329.                   msgpath[61],
  330.                   filepath[61],
  331.                   freespace51[61],
  332.                   bipath[61],
  333.                   temppath[61],
  334.                   userbasepath[61],
  335.                   avatarpath[61],
  336.                   ascpath[61],
  337.                   asclowpath[61],
  338.                   filemaint[61],
  339.                   fileattachpath[61],
  340.                   soundpath[61],
  341.                   fastindexpath[61],
  342.                   systempwd[16],                 /* Password to Logon System */
  343.                   sysoppwd[16],                  /* Password to Keyboard */
  344.                   newuserpwd[16],                /* Password for Newuser */
  345.                   newtopmenu[9],                 /* NewUser TopMenu */
  346.                   freespace52[4],
  347.                   inboundmail[61],
  348.                   outboundmail[61],
  349.                   uploadpath[61],
  350.                   swapfile[61],
  351.                   multipath[61],
  352.                   brackets[3],
  353.                   inactivitytime,
  354.                   minmesscheck,
  355.                   maxlogintime,
  356.     /* unused */  freespace53,
  357.                   answerdelay;
  358.     unsigned char shellswap,
  359.                   highbit,
  360.                   disppass,
  361.                   asklocalpass,
  362.                   fastlogon,
  363.                   sysopremote,
  364.                   printerlog,
  365.                   phone1ask,
  366.                   colourask,
  367.                   aliasask,
  368.                   dobask,
  369.                   phoneforce,
  370.                   direct_video,
  371.                   snow_check;
  372.     char          freespace54;
  373.     char          screen_blank;
  374.     unsigned char oneword;
  375.     AskType       checkmail,
  376.                   checkfile,
  377.                   ansiask,
  378.                   fullscreenask,
  379.                   clearask,
  380.                   moreask,
  381.                   avatarask,
  382.                   extendask,
  383.                   usdateask;
  384.     unsigned char phone2ask,
  385.                   phoneformat[15],
  386.                   nameprompt[61],
  387.                   pwdprompt[61],
  388.                   shellprompt[61],
  389.                   shell2prompt[61],
  390.                   enterprompt[61],
  391.                   chatprompt[61],
  392.                   listprompt[61];
  393.    unsigned char  f7keylinetop[80],
  394.                   f7keylinebot[80],
  395.                   freespace55[84],
  396.                   chat2prompt[61],
  397.                   screenlengthprompt[61], /* */
  398.                   screenclearprompt[61],  /* */
  399.                   locationprompt[61],
  400.                   freeprompt[61],
  401.                   loadprompt[61],
  402.                   avatarprompt[61],       /* */
  403.                   aliasprompt[61];
  404.      unsigned int security,
  405.                   logonsecurity;
  406.      FlagType     flags;
  407.     unsigned char minpasslength,
  408.    /* Constant */ dispfwind,                /* Status Bar Colour */
  409.    /* Constant */ dispbwind,                /* Status Bar Colour */
  410.    /* Constant */ disppopupf,               /* Popup Forground  */
  411.    /* Constant */ disppopupborder,          /* Popup Border     */
  412.    /* Constant */ disppopupb,               /* Popup Background */
  413.    /* Constant */ dispf;                    /* Foreground Colour */
  414.     unsigned char freespace56,
  415.                   comport,
  416.                   passlogons,
  417.                   doblogon,
  418.                   printerport,
  419.                          /* 0 : LPT1
  420.                             1 : LPT2
  421.                             2 : LPT3
  422.                             3 : COM1
  423.                             4 : COM2
  424.                             5 : COM3
  425.                             6 : COM4  */
  426.                   passtries;
  427.     unsigned char topmenu[9];
  428.     unsigned char freespace100[4];
  429.      unsigned int watchmess,
  430.    /* constant */ netmailcredit,
  431.                   ansiminbaud,
  432.    /* unused */   freespace57,
  433.                   slowbaud,
  434.                   minloginbaud,
  435.                   lowsecuritystart,
  436.                   lowsecurityend,
  437.                   slowstart,
  438.                   slowend;
  439.             char  quotestring[6],
  440.                   freespace58,
  441.                   offhook;
  442.     unsigned int  forcecrashmail,
  443.                   optioncrashmail,
  444.                   netmailfileattach;
  445.     unsigned char popuphighlight,
  446.                   freespace59,
  447.                   maxpages,
  448.                   maxpagefiles,
  449.                   pagelength;
  450.      unsigned int pagestart[7],
  451. /* constant */    pagemessboard,
  452.                       /* Message Board for Paging (0=Not In Use) */
  453.                   localfattachsec,
  454.                   sectouploadmess,
  455.                   sectoupdateusers,
  456.                   readsecnewecho,
  457.                   writesecnewecho,
  458.                   sysopsecnewecho;
  459.     unsigned int  secreplyvianetmail;
  460.         AskType   netmailkillsent;
  461.     unsigned char swaponarchive;
  462.  
  463.     unsigned char freespace60[9];
  464.  
  465.     unsigned char popuptext;
  466.     unsigned int  pageend[7];
  467.     unsigned char freespace61[22];
  468.     unsigned int  incomingcallstart,
  469.                   incomingcallend,
  470.  
  471.   /* unused */    freespace62;
  472.  
  473.      unsigned char altf[10][61],
  474.                   ctrlf[10][41],
  475.    /* unused  */  freespace63[4];
  476.     unsigned int  fp_credit;             /* Newuser Filepoints */
  477.     unsigned char ks_per_fp,             /* Number of Kilobytes per FP */
  478.                   fp_upload,             /* Filepoints Upload Credit */
  479.                   rego_warn_1,
  480.                   rego_warn_2;
  481.    char           freespace64[2];
  482.    unsigned int   min_space_1;
  483.    unsigned char  swapbimodem,
  484.                   modembusy,                /* Toggle DTR or ATH1 */
  485.                   scrheight,                /* 43/50 line mode */
  486.                   msgtmptype,               /* True  = MSGTMP False = MSGTMP.<node> */
  487.                   swapupload;
  488.    char           phonelogon,
  489.                   carrierdetect;           /* Carrier Detect (Default=$80) */
  490.    unsigned char  newfileshighlight;
  491.    char           max_descrip,
  492.                   min_descrip;
  493.    unsigned int   requestreceipt;
  494.    char           ushowdate;
  495.    char           ufilesizek;
  496.    unsigned char  uuploader,
  497.                   udownloadcount,
  498.  /* unused */     freespace4,
  499.                   ushowsecurity,
  500.                   sshowdate;
  501.    char           sfilesizek;
  502.    unsigned char  suploader,
  503.                   sdownloadcount,
  504.  /* Unused */     freespace5,
  505.                   sshowsecurity,
  506.                   ushowtime,
  507.                   ushowfp,
  508.                   sshowtime,
  509.                   sshowfp;
  510.     unsigned int  fp_percent;             /* Download Filepoints Credit */
  511.     char          autodetect;
  512.                         /* Bit 0 : Auto Detect ANSI
  513.                                1 : ANSI Detect for NewUser
  514.                                2 : Auto Detect IEMSI
  515.                                3 : IEMSI Detect for NewUser
  516.                                4-7 [Reserved] */
  517.     unsigned char dispsecurityfile,
  518.                   askforpagereason,
  519.                   delincompletefiles;
  520.    char           freespace65;
  521.    char           swaponfeditview;
  522.  
  523.    char           freespace6,
  524.                   secfileschar,
  525.                   passchar;
  526.    unsigned char  localinactivity;
  527.    char           conversiononmaster;
  528.    char           leftbracket[2],
  529.                   rightbracket[2];
  530.    unsigned int   ignorefp;               /* Min Security to Ignore FPs */
  531.    char           menuminage;             /* Minimum Age for Age Checks */
  532.    char           freespace66;
  533.    unsigned int   modemeff[MAXBAUDREC],
  534.                   modembaud[MAXBAUDREC];
  535.    unsigned char  modemconnect[MAXBAUDREC][16];
  536.    char           freespace67[10];
  537.    unsigned int   configattr;
  538.                       /*  Bit  0 : Move Local Uploads
  539.                                1-15 [Reserved] */
  540.    char           usercol1_2,
  541.                   usercol3_4,
  542.                   usercol5_6,
  543.                   usercol7_8,
  544.                   userbkcol,
  545.                   newusercol2,
  546.                   chstatcol,
  547.                   getentercol;
  548.    unsigned char  usdateforsysop,
  549.                   ezyovrpath[61];
  550.    UserString     sysfree3;
  551.    unsigned char  ovrems;
  552.    char           swapezy,
  553.                   filesecpath[61];
  554.    unsigned char  freespace28;
  555.    char           multitasker;
  556.                      /*  0 = Do Not Detect or Use Any MultiTasker
  557.                          1 = Auto-Detect
  558.                          2 = Desqview
  559.                          3 = Double DOS
  560.                          4 = OS 2
  561.                          5 = MultiDOS Plus
  562.                          6 = Taskview
  563.                          7 = Topview
  564.                          8 = PC MOS
  565.                          9..255 [Reserved] */
  566.    unsigned int   maxbaud;                /* longint in 1.02 */
  567.    unsigned char  lockedport;
  568.    unsigned int   filereqsec;
  569.    unsigned char  autoanswer,
  570.                   initresponse[11],
  571.                   ringstring[11];
  572.    char           inittries,
  573.                   initstring1[61],
  574.                   initstring2[61],
  575.                   busystring[21],
  576.                   answerstring[21],
  577.                   mailerstring[61];
  578.    unsigned int   modemstart,
  579.                   modemend;
  580.    char           modemdelay;
  581.    unsigned char  sendbreak;
  582.     unsigned char externaleditor[61],
  583.                   defaultorigin[51],
  584.                   connectfax[16];
  585.    char           freespace22[16];
  586.    unsigned int   uploadcredit;
  587.    /* Upload Credit Percentage */
  588.    char           sysfree4[36];        /**/
  589.    char           shownewfileschar;
  590.                         /* 0 - No
  591.                            1 - ASCII Only
  592.                            2 - Always */
  593.    unsigned int   zonea[16],  /* unused */
  594.                   neta[16],
  595.                   nodea[16],
  596.                   pointa[16],
  597.    /* Unused   */ freespace24[16];
  598.    char           freespace9[16][21],
  599.                   nocarrierstring[21];
  600.    UserString     guestaccount;
  601.    char           freespace[MAXFREE];
  602. } CONFIGRECORD;
  603.  
  604. /********************************************************************
  605.  * CONSTANT.EZY record structure
  606.  *
  607.  * scantossattr = bit 0 : Dupe Detection
  608.  *                    1 : Kill Null Netmail
  609.  *                    2 : Keep EchoArea Node Receipts
  610.  *                    3 : Import Messages To Sysop
  611.  *                    4 : Route Mail (Off = Direct)
  612.  *                    5 : Kill Bad Archives
  613.  *                    6 : ARCMail 0.6 Compatability
  614.  *                   7-15 [Reserved]
  615.  *
  616.  * constantattr = bit 0 : Sysop Alias in Chat
  617.  *                    1 : Auto Log Chat
  618.  *                    2 : Display Full Message To User
  619.  *                    3 : Do not delete outbound mail bundles with no .MSG
  620.  *                   4-15 [Reserved]
  621.  *
  622.  * unknownarea  =     0 : Kill Messages
  623.  *                    1 : Make a New EchoMail Area
  624.  *                    2 : Make a New PassThru Area
  625.  *
  626.  ********************************************************************/
  627. typedef struct CONSTANTRECORD
  628. {
  629.    unsigned char  version[9];
  630.    unsigned char  system[41];
  631.    UserString     sysopname,
  632.                   sysopalias;
  633.    unsigned char  systemlocation[36];
  634.    unsigned char  multiline;              /* (B) */
  635.    unsigned int   maxmess,                /* maximum usable message areas */
  636.                   maxfile;                /* maximum usable file areas */
  637.    unsigned int   watchmess,              /* watchdog message board */
  638.                   pagemessboard,          /* paging message board */
  639.                   badpwdmsgboard;         /* bad pwd message board */
  640.    unsigned char  mintimeforcall;         /* minimum time to register call */
  641.    unsigned char  freespace2[11];
  642.    unsigned int   scantossattr,
  643.                   constantattr;
  644.    unsigned int   maxmsgsrescan;          /* maximum msgs to rescan (0=disable) */
  645.    unsigned char  qwkfilename[9];
  646.    unsigned int   qwkmaxmail,
  647.                   qwkmsgboard;
  648.    NETRECORD      netaddress[MAXAKA];
  649.    unsigned int   netmailboard[MAXAKA];
  650.    unsigned char  newareagroup[MAXAKA];
  651.    unsigned int   newareastmess[MAXAKA];
  652.    unsigned char  quotestring[6];
  653.    unsigned char  swaponezymail;
  654.    unsigned char  unknownarea;
  655.    unsigned char  swaponfeditview,
  656.                   swaponarchive;
  657.     unsigned int   minspaceupload;
  658.    unsigned char  textinputcolour;
  659.     unsigned int   badmsgboard;
  660.    unsigned char  freespace[CONSTANTFREESPACE];
  661. } CONSTANTRECORD;
  662.  
  663. typedef struct COMPRESSRECORD
  664. {
  665.     unsigned char echounarccmd[6][13];
  666.     unsigned char echounarcpar[6][19];
  667.     unsigned char echoarccmd[6][13];
  668.     unsigned char echoarcpar[6][19];
  669. } COMPRESSRECORD;
  670.  
  671. typedef char DOMAINTYPE[MAXAKA][21];
  672.  
  673. typedef struct CONSTANTFILERECORD
  674. {
  675.     CONSTANTRECORD constantrecord;
  676.     char           space[CONSTANTFILEFREESPACE];
  677.     COMPRESSRECORD compress;
  678.     DOMAINTYPE     domaintype;
  679. } CONSTANTFILERECORD;
  680.  
  681. /********************************************************************
  682.  * LIMITS.EZY record structure
  683.  ********************************************************************/
  684. typedef struct LIMITSRECORD
  685. {
  686.     unsigned int  security;
  687.     unsigned int  time;
  688.     unsigned int  limit[11];
  689.     unsigned char ratio;
  690.     unsigned int  credit;
  691.     unsigned char ratiok;
  692.     unsigned int  creditk;
  693.     unsigned int  regodays;
  694.     unsigned int  creditmess;
  695.     unsigned int  mess;
  696.     unsigned int  timerpercall;
  697.     unsigned char callsperday;
  698.     unsigned char freespace;
  699.     unsigned int  maxbankwk,
  700.                   maxbankwt,
  701.                   maxbankdk,
  702.                   maxbankdt,
  703.                   maxkbank,
  704.                   maxtbank;
  705. } LIMITSRECORD;
  706.  
  707.  
  708. /********************************************************************
  709.  * FILEPATH.EZY record structure
  710.  *
  711.  * attribute = bit 0 : cd rom path
  712.  *                 1 : show as not found
  713.  *                 2 : free downloads
  714.  *                 3 : age check (config age or over)
  715.  *              4..7 : reserved
  716.  ********************************************************************/
  717. typedef struct FILEPATHRECORD
  718. {
  719.     PathString    filepath;
  720.     unsigned int  security;
  721.     FlagType      flags;
  722.     unsigned int  uploadarea;
  723.     unsigned char password[9];
  724.     unsigned char attribute;
  725. } FILEPATHRECORD;
  726.  
  727.  
  728. /********************************************************************
  729.  * FILESEC.EZY structure
  730.  *
  731.  * attribute = bit 0 : [ reserved ]
  732.  *                 1 : show as not found
  733.  *                 2 : free downloads
  734.  *                 3 : age check (config age or over)
  735.  *              4..7 : [ reserved ]
  736.  *
  737.  ********************************************************************/
  738. typedef struct FILESECRECORD
  739. {
  740.     unsigned char filename[13];
  741.     unsigned int  security;
  742.     FlagType      flags;
  743.     unsigned char password[9];
  744.     unsigned char attribute;
  745. } FILESECRECORD;
  746.  
  747.  
  748. /*****************************************************************
  749.  * FILExxx.EZY record structure
  750.  *
  751.  * attribute = bit 0 : checked
  752.  *                 1 : reserved
  753.  *                 2 : offline
  754.  *                 3 : reserved
  755.  *                 4 : private
  756.  *                 5 : deleted
  757.  *                 6 : reserved
  758.  *                 7 : security
  759.  *
  760.  *****************************************************************/
  761. typedef struct FILELISTRECORD
  762. {
  763.     unsigned char filename[13];
  764.     unsigned char description[51];
  765.     long int      fsize;             /* Shown in Bytes */
  766.     unsigned int  fdate;
  767.     unsigned char attribute;
  768.     unsigned char attribute2;       /* reserved */
  769.     UserString    uploader;
  770.     unsigned int  downloads;
  771. } FILELISTRECORD;
  772.  
  773.  
  774. /**************************************************************
  775.  * FILES.EZY structure
  776.  *
  777.  * attribute = bit 0 : keep files offline
  778.  *             bit 1 : offline allowed
  779.  *             bit 2 : sortby date
  780.  *             bit 3 : sortby alpha
  781.  *             bit 4 : master list
  782.  *             bit 5 : age testing using < age in config
  783.  *              6..7 : [ reserved ]
  784.  *
  785.  *   convert = 0 : none
  786.  *             1 : zip
  787.  *             2 : lzh
  788.  *             3 : arj
  789.  *             4 : pak
  790.  *             5 : arc
  791.  *             6 : zoo
  792.  *        7..255 : [ reserved ]
  793.  *
  794.  **************************************************************/
  795. typedef struct FILERECORD
  796. {
  797.     unsigned char name[31];
  798.     unsigned char attribute,
  799.                   convert;
  800.              char filegroup;
  801.     unsigned int  uptemplate,
  802.                   upfilepath;
  803.     long int      freespace;
  804.     unsigned int  security;
  805.     FlagType      flags;
  806.     unsigned int  syssecurity;
  807.     FlagType      sysflags;
  808. } FILERECORD;
  809.  
  810.  
  811. /*************************************************************
  812.  * EZYDOWN.<NODE> record structure  (Pre-Download)
  813.  *************************************************************/
  814. typedef struct PREDOWNLOADRECORD
  815. {
  816.     unsigned char filename[13];     /* */
  817.     MaxStr        locationfile;     /* */
  818.     long int      fsize;            /* File Size in kilobytes */
  819.     char          freedown;         /* (B) */
  820.     long int      timetodown;       /* download time in Seconds */
  821.     char          deleted;          /* (B) */
  822. } PREDOWNLOADRECORD;
  823.  
  824.  
  825. /*************************************************************
  826.  * EZYUP.<NODE> record structure (Pre-Upload)
  827.  *************************************************************/
  828. typedef struct PREUPLOADRECORD
  829. {
  830.     unsigned char filename[13];     /* */
  831.     unsigned char description[51];  /* */
  832.     char          isdupe;           /* (B) */
  833. } PREUPLOADRECORD;
  834.  
  835.  
  836. /*************************************************************
  837.  * MAINT1.BBS - MAINT2.BBS record structures
  838.  *************************************************************/
  839. typedef struct MAINT_RECORD
  840. {
  841.     unsigned char filename[13];
  842.     unsigned int  filepoint;
  843.     UserString    downloader,
  844.                   uploader;
  845. } MAINT_RECORD;
  846.  
  847.  
  848. /*************************************************************
  849.  * Fast Find Index record structures
  850.  * Information Below Explains how to fill the FASTINDEXRECORD.name Field
  851.  * Filenames are PADDED to fill out the fields as follows.
  852.  * Filename = 8 bytes
  853.  * FileExt  = 4 bytes consisting of a .(Period) + 3 Alpha/Numeric chars
  854.  * Length Byte Precedes the string in Pascal and is replaced with
  855.  * a NULL or Terminating char under C.
  856.  * If at anytime Filename or FileExt do not fill their fields
  857.  * they are to be padded with spaces.
  858.  * eg: DUMMY.LZH = "DUMMY   .LZH", or, DUMMY.L = "DUMMY   .L  "
  859.  *
  860.  * An easy way to achieve this under Turbo or Borland C follows.
  861.  *
  862.  * fnsplit(filename,drv,pth,fnm,ext);
  863.  * sprintf(FASTINDEXRECORD.name,"%-8.8s%-4.4s",fnm,ext);
  864.  *************************************************************/
  865. typedef long int FastPointerRecord[730];  /* FFPTR.EZY */
  866. typedef struct FASTINDEXRECORD    /* FFIDX.EZY */
  867. {
  868.     unsigned char name[13];
  869.     unsigned int  template;        /* directory of file 1 -> */
  870.     char          deleted;         /* boolean */
  871. } FASTINDEXRECORD;
  872.  
  873.  
  874. /*************************************************************
  875.  * ONLINE.BBS record structure
  876.  *
  877.  * status =   0: active
  878.  *            1: reserved
  879.  *            2: downloading
  880.  *            3: uploading
  881.  *            4: bimodem transfer
  882.  *            5: message browsing
  883.  *            6: door/outside
  884.  *            7: in chat with sysop
  885.  *            8: in chat with other users - channel 000
  886.  *          ???: in chat with other users - channel ???
  887.  *          207: in chat with other users - channel 199
  888.  *      208-252: [reserved]
  889.  *          253: node not active in any way
  890.  *          254: user in login process
  891.  *          255: waiting for caller
  892.  *************************************************************/
  893.  typedef struct ONLINERECORD
  894.  {
  895.     UserString    name,            /* Should Blank if NO user online */
  896.                   alias;
  897.     unsigned char status;
  898.     unsigned char attribute;
  899.     long int      baud;
  900.     unsigned char location[26];
  901. } ONLINERECORD;
  902.  
  903. /*************************************************************
  904.  * MESSNODE.<NODE> record structure
  905.  *************************************************************/
  906. typedef struct MULTIMESSAGERECORD
  907. {
  908.     UserString    from;         /* From Username */
  909.     unsigned int  fromnode;     /* From Node */
  910.     unsigned char message[81];
  911.     char          private;      /* boolean */
  912. } MULTIMESSAGERECORD;
  913.  
  914. /*************************************************************
  915.  * BESTSTAT.BBS record structure
  916.  *
  917.  *    bestname[0] is for bestmessages
  918.  *    bestname[1] is for bestcalls
  919.  *    .....
  920.  *    bestname[6] is for bestdownk
  921.  *
  922.  *************************************************************/
  923. typedef struct BESTUSERRECORD
  924. {
  925.     unsigned char bestname[7][36];
  926.     unsigned int  bestmessages,
  927.                   bestcalls,
  928.                   bestups,
  929.                   bestdns,
  930.                   bestfps;
  931.     long int      bestupk,
  932.                   bestdownk;
  933. } BESTUSERRECORD;
  934.  
  935.  
  936. /*************************************************************
  937.  * MSGHxxx.BBS record structure
  938.  *
  939.  * msgattr = bit 0    deleted
  940.  *               1    netmail pending export
  941.  *               2    [reserved]
  942.  *               3    private
  943.  *               4    received
  944.  *               5    echomail pending export
  945.  *               6    locally generated msg
  946.  *               7    do not kill message
  947.  *
  948.  * netattr = bit 0     kill/sent
  949.  *               1     sent
  950.  *               2     file attach
  951.  *               3     crash
  952.  *               4     file req
  953.  *               5     request reciept
  954.  *               6     audit request
  955.  *               7     is a return reciept
  956.  *
  957.  * extattr =  bit 0-7   [reserved]
  958.  *
  959.  *************************************************************/
  960. typedef struct MSGHDRRECORD
  961. {
  962.     unsigned int  prevreply,
  963.                   nextreply;            /* 0=No Reply Chain */
  964.     long int      startposition,        /* Byte Offset of Text in MSGTxxx.BBS */
  965.                   messagelength;        /* Length of msg including Null terminator */
  966.     NETRECORD     destnet,
  967.                   orignet;
  968.     unsigned int  cost;
  969.     unsigned char msgattr;
  970.     unsigned char netattr;
  971.     unsigned char extattr;
  972.     long int      posttimedate;         /* Dos format packed time & date */
  973.     long int      recvtimedate;         /* Dos format packed time & date */
  974.     UserString    whoto,
  975.                   whofrom;
  976.     unsigned char subject[73];
  977. } MSGHDRRECORD;
  978.  
  979.  
  980. /*************************************************************
  981.  * MSGFAST.BBS record structure
  982.  *
  983.  * standard 32 Bit CRC on whoto in MSGH???.BBS
  984.  * Username is CRCd in UPPERCASE, and does not
  985.  * include null terminator or length byte
  986.  *
  987.  *************************************************************/
  988. typedef struct MSGFASTRECORD
  989. {
  990.     long     int  whoto;       /* 32 bit CRC on WhoTo in MSGHxxx.BBS */
  991.     unsigned int  msgboard,
  992.                   msgnumber;
  993. } MSGFASTRECORD;
  994.  
  995.  
  996. /*************************************************************
  997.  * MSGEXPRT.BBS
  998.  * file of maxmess records defining if area needs echo/netmail scan
  999.  *************************************************************/
  1000. typedef char needscanrecord[MAXMESS];  /* boolean */
  1001.  
  1002. /*************************************************************
  1003.  * MSGREPLY.BBS
  1004.  * file of maxmess records defining if area needs reply chaining
  1005.  *************************************************************/
  1006. typedef char needreplytype[MAXMESS];  /* boolean */
  1007.  
  1008.  
  1009. /*************************************************************
  1010.  * MSGTxxx.BBS structure definition (No Predefined Rec Size)
  1011.  *
  1012.  * Each text part of a message starts at "Startposition" and
  1013.  * continues until a NULL terminator is found, or EOF is reached.
  1014.  * Msg Text length is limited to 16Meg as defined by Turbo Pascal
  1015.  * The messagelength MUST be the same length as the message text
  1016.  * including the NULL terminator, as MSGCOMP uses this field for
  1017.  * speed and for kilobyte deletion
  1018.  *************************************************************/
  1019.  
  1020.  
  1021. /*************************************************************
  1022.  * MESSAGES.EZY record structure
  1023.  *
  1024.  * attribute = bit 0 : allow aliases
  1025.  *                 1 : use alias
  1026.  *                 2 : use alias, ask for aliases
  1027.  *                 3 : test age as defined in config.xx
  1028.  *                 4 : combined area access
  1029.  *                 5 : local file attaches
  1030.  *                 6 : strip private bit on incoming echomail
  1031.  *                 7 : security
  1032.  *
  1033.  * attribute2 = bit 0 : show seenby lines
  1034.  *                  1 : forced mail check
  1035.  *                  2 : strip forward seenbys
  1036.  *               3..4 : [reserved]
  1037.  *                  5 : areafix info visible
  1038.  *                  6 : initial combined area access
  1039.  *                  7 : Do Not use in Template
  1040.  *
  1041.  * attribute3 = [Reserved]
  1042.  *
  1043.  * destnode = nodes  1 to  8 - destnode[1]
  1044.  *            nodes  9 to 16 - destnode[2]
  1045.  *            nodes 17 to 24 - destnode[3]
  1046.  *            etc, etc, etc.
  1047.  *
  1048.  *************************************************************/
  1049. typedef struct MESSAGERECORD
  1050. {
  1051.     unsigned char name[31];
  1052.     unsigned char areatag[31];
  1053.     unsigned char qwkname[13];
  1054.     MsgType       typ;              /* msgtype */
  1055.     MsgKindsType  msgkinds;         /* msgkinds type */
  1056.     unsigned char attribute,
  1057.                   attribute2,
  1058.                   attribute3;
  1059.     unsigned char dayskill,
  1060.                   recvkill;
  1061.     unsigned int  countkill,
  1062.                   kilobytekill,
  1063.                   readsecurity;
  1064.     FlagType      readflags;    /* Flagtype */
  1065.     unsigned int  writesecurity;
  1066.     FlagType      writeflags;      /* Flagtype */
  1067.     unsigned int  sysopsecurity;
  1068.     FlagType      sysopflags;      /* Flagtype */
  1069.     unsigned char originline[51];
  1070.     unsigned char originaddress;
  1071.     unsigned char seenby[MAXAKA/8];
  1072.     char          areagroup,
  1073.                   messgroup;
  1074.     unsigned char destnodes[MAXNODES/8];
  1075.     unsigned char echomailfeed;           /* 0=No Uplink */
  1076. } MESSAGERECORD;
  1077.  
  1078.  
  1079. /*************************************************************
  1080.  * ECHOMGR.EZY record structure ( 1 to 128 records )
  1081.  *
  1082.  * compress = 0 : compress to zip
  1083.  *            1 : compress to lzh
  1084.  *            2 : compress to arj
  1085.  *            3 : compress to arc
  1086.  *            4 : compress to pak
  1087.  *            5 : compress to zoo
  1088.  *            6 : compress to sqz
  1089.  *
  1090.  * attribute = bit 0 : node active
  1091.  *                 1 : crash mail
  1092.  *                 2 : hold mail
  1093.  *                 3 : node can create new echos
  1094.  *                 4 : add node to export on new echo creation
  1095.  *                 5 : Direct Mail (Off=Mail Routed)
  1096.  *               6-7 : [reserved]
  1097.  *
  1098.  * sendpkttype = 0 : type 2
  1099.  *               1 : type 2+
  1100.  *               2-255 [reserved]
  1101.  *
  1102.  *************************************************************/
  1103. typedef struct ECHOMGRRECORD
  1104. {
  1105.     NETRECORD     destnet;
  1106.     unsigned char redirectto;
  1107.     unsigned char groups[4];
  1108.     unsigned char compress;
  1109.     unsigned char attribute;
  1110.     unsigned char passwordto[21],
  1111.                   passwordfr[21];
  1112.     unsigned char dayshold,
  1113.                   sendpkttype;
  1114. } ECHOMGRRECORD;
  1115.  
  1116.  
  1117. /*************************************************************
  1118.  * EVENTS.EZY record structure
  1119.  *
  1120.  * attribute = bit 0 : enabled
  1121.  *              1..7 : [reserved]
  1122.  *
  1123.  * days = bit 0 : sunday
  1124.  *            1 : monday
  1125.  *            ...
  1126.  *            6 : saturday
  1127.  *            7 : [reserved]
  1128.  *
  1129.  *************************************************************/
  1130. typedef struct EVENTRECORD
  1131. {
  1132.     unsigned char attribute;
  1133.     unsigned int  starttime;     /* msb=Hour, lsb=Minutes */
  1134.     unsigned char errorlevel;
  1135.     unsigned char days;
  1136.     unsigned int  lasttimerun;
  1137. } EVENTRECORD;
  1138.  
  1139.  
  1140. /*************************************************************
  1141.  * TODAY.BBS & YESTER.BBS record structure
  1142.  *
  1143.  * didwhat = bit 0 : (n) new user
  1144.  *               1 : (u) upload
  1145.  *               2 : (d) download
  1146.  *               3 : (r) read mail
  1147.  *               4 : (s) sent mail
  1148.  *               5 : (o) door/outside
  1149.  *               6 : (c) chat with sysop and/or user(s)
  1150.  *               7 : (p) paged sysop
  1151.  *
  1152.  *************************************************************/
  1153. typedef struct ONTODAYRECORD
  1154. {
  1155.     unsigned char line;
  1156.     UserString    name,
  1157.                   alias;
  1158.     unsigned char location[26];
  1159.     unsigned int  baudrate;
  1160.     unsigned int  logontime;
  1161.     unsigned int  logofftime;
  1162.     unsigned char didwhat;
  1163. } ONTODAYRECORD;
  1164.  
  1165.  
  1166. /*************************************************************
  1167.  * system usage record structure
  1168.  *************************************************************/
  1169. typedef struct USEAGERECORD
  1170. {
  1171.     unsigned int  startdate;
  1172.     long int      busyperhour[24];  /* Minutes Used */
  1173.     long int      busyperday[7];    /* Minutes Used */
  1174. } USEAGERECORD;
  1175.  
  1176.  
  1177. /*************************************************************
  1178.  * MSGINFO.<Node>
  1179.  * Created when external FSE called
  1180.  *
  1181.  * returnstatus = 0 = FSE Record Not Used
  1182.  *                1 = Message Saved
  1183.  *                2 = Message Aborted
  1184.  *                3 = User Inactivity
  1185.  *                4 = User Hungup
  1186.  *                5 = Sysop Hungup
  1187.  *
  1188.  * attribute = bit 0 : can change subject
  1189.  *                 1 : can change whoto
  1190.  *                 2 : can change private
  1191.  *                 3 : private message
  1192.  *                 4 : is message forwarded (false = quoted)
  1193.  *                 5 : netmail message
  1194.  *                 6 : avatar in use
  1195.  *                 7 : echomail message
  1196.  *************************************************************/
  1197. typedef struct FSERECORD
  1198. {
  1199.     UserString    whofrom;
  1200.     NETRECORD     orignet;
  1201.     UserString    whoto;
  1202.     NETRECORD     destnet;
  1203.     unsigned char subject[73];
  1204.     unsigned char returnstatus;
  1205.     unsigned char attribute;
  1206.     long int      baudrate,
  1207.                   lockedbaud;
  1208.     unsigned char comport;
  1209.     unsigned char screenlength;
  1210.     unsigned int  timeleft;
  1211. } FSERECORD;
  1212.  
  1213.  
  1214. /*************************************************************
  1215.  * Used in ExitInfo record (Could be used as Union under C)
  1216.  *************************************************************/
  1217. typedef struct TIMERECORD
  1218. {
  1219.     unsigned char hour,
  1220.                   min;
  1221. } TIMERECORD;
  1222.  
  1223.  
  1224. /*************************************************************
  1225.  * EXITINFO.<node> record structure
  1226.  *
  1227.  * iemsi_req1 = bit 0 : News
  1228.  *                  1 : Mail
  1229.  *                  2 : File
  1230.  *                  3 : ClrScr
  1231.  *                  4 : Quiet
  1232.  *                  5 : More
  1233.  *                  6 : FSE
  1234.  *                  7 : [Reserved]
  1235.  *
  1236.  * iemsi_scrlen : Screen Length for current session Only.  If NO Iemsi
  1237.  *                session, this is set to users Normal screen length.
  1238.  *
  1239.  * iemsi_prot = bit 0 : ZModem
  1240.  *                  1 : SEAlink
  1241.  *                  2 : Kermit
  1242.  *               3..7 : [reserved]
  1243.  *
  1244.  * iemsi_crt  = 0 : TTY
  1245.  *              1 : ANSI
  1246.  *              2 : AVT0+
  1247.  *              3 : VT100
  1248.  *              4 : VT52
  1249.  *         5..255 : [reserved]
  1250.  *
  1251.  * iemsi_cap  = bit 0 : CHT
  1252.  *                  1 : MNU
  1253.  *                  2 : TAB
  1254.  *                  3 : ASCII
  1255.  *               4..7 : [reserved]
  1256.  *
  1257.  *************************************************************/
  1258. typedef struct EXITINFORECORD
  1259. {
  1260.     unsigned int  baud,                 /* Speed between Modem<->Modem */
  1261.                   lockedbaud;           /* Speed between Modem<->PC */
  1262.     unsigned char comport;              /* Com1=1 Com2=2 etc etc */
  1263.     unsigned int  efficiency;           /* Baud rate efficiency */
  1264.     unsigned int  userrecnum;           /* User Record Number, 0=User_1 */
  1265.     USERSRECORD   userinfo;
  1266.     USERSEXTRARECORD userextra;
  1267.     unsigned char extraspace[128];
  1268.     UserString    sysopname,            /* Sysops Name as defined in Config.xxx */
  1269.                   sysopalias;           /* Sysops Alias as defined in Config.xxx */
  1270.     unsigned char system[41];           /* System Name as defined in Config.xxx */
  1271.     unsigned int  downloadlimit;        /* */
  1272.     unsigned int  timelimit;
  1273.     unsigned int  timetakenevent;         /* Number of Minutes taken from user due to event */
  1274.     long int      timecreated;            /* Number of seconds since Midnight */
  1275.     long int      timeofnextevent;        /* Number of seconds from midnight */
  1276.     unsigned int  timetillnextevent;      /* Number of seconds After timecreated */
  1277.     unsigned char dayofnextevent;         /* 0=Sun, 6=Sat, 7=NoEvent */
  1278.     unsigned char errorlevelofnextevent;  /* Errorlevel to return from next event */
  1279.     unsigned char ratio;
  1280.     unsigned int  credit;
  1281.     unsigned char ratiok;
  1282.     unsigned int  creditk,
  1283.                   regodays,
  1284.                   creditmess;
  1285.     unsigned int  mess;
  1286.     DATETIME      logintimedate;
  1287.     unsigned char stack[20][9];           /* Menu Stack */
  1288.     unsigned char stackpos;               /* Menu Stack Position, 0 = No Stack */
  1289.     Str8          curmenu;                /* FileName of Current Menu */
  1290.     unsigned char oldpassword[16];
  1291.     unsigned int  limitrecnum;            /* Limits Record being used */
  1292.     unsigned char baudrecnum;             /* BaudRate record being used */
  1293.     char          hibitreplace;           /* HiBit replacement char */
  1294.     unsigned char maxpages;               /* Times user can page sysop */
  1295.     unsigned char pagedsysop;             /* Times user has paged sysop */
  1296.     char          wantchat;               /* boolean */
  1297.     long int      pagestart,
  1298.                   pageend;                /* Seconds since midnight */
  1299.     unsigned char pagelength;
  1300.     char          echoentered,            /* boolean */
  1301.                   netentered,
  1302.                   nextsysop;
  1303.     unsigned char inactivitytime;         /* Seconds */
  1304.     char          protrecnum;             /* Default Protocol record number, 0=NoDefault */
  1305.     unsigned char protname[16];           /* Default Protocol Name */
  1306.     unsigned char didwhat;                /* Did what flag for Todays callers */
  1307.     unsigned char pagereason[61];
  1308.     unsigned char mtasker;                /* 0=No Multitasker, 1=[Reserved] */
  1309.              char iemsi_session;          /* boolean */
  1310.     unsigned char iemsi_req1,
  1311.                   iemsi_req2,
  1312.                   iemsi_scrlen;
  1313.     unsigned char iemsi_prot,
  1314.                   iemsi_crt,
  1315.                   iemsi_cap;
  1316.     char          pagesound;              /* (B) */
  1317.     unsigned char freespace[99];
  1318. } EXITINFORECORD;
  1319.  
  1320.  
  1321. /*************************************************************
  1322.  * sysinfo record structure
  1323.  *************************************************************/
  1324. typedef struct SYSINFORECORD
  1325. {
  1326.     long int      callcount;
  1327.     UserString    lastcaller;
  1328.     long int      filesizek;           /* Updated by EzyFF -C */
  1329.     unsigned int  newusers,
  1330.                   newfiles,
  1331.                   newmessages;         /* Does not include Inbound Echomail */
  1332.     UserString    lastalias;
  1333.     unsigned int  laststarttime;
  1334.     unsigned char extraspace[80];
  1335. } SYSINFORECORD;
  1336.  
  1337.  
  1338. /*************************************************************************/
  1339. /* Some sample C Src to replicate most of the functions shown in the     */
  1340. /* Pascal version of the EzyCom Structures  (Turbo/Borland)              */
  1341. /*************************************************************************/
  1342.  
  1343. /**********************************************************
  1344.  * Determine if a file or path exists.
  1345.  * Returns 1 if true and 0 if false.
  1346.  * To check a path do NOT include the trailing backslash.
  1347.  * Note: You could use "findfirst()" for this also.
  1348.  *
  1349.  * eg: if(exists(filepath)) do_something(); else is_error();
  1350.  **********************************************************/
  1351. int exists(char *filepath)
  1352. {
  1353.     return( access( filepath, 0 ) == 0 );
  1354. }
  1355.  
  1356. /**********************************************************
  1357.  * Check if file path has a trailing backslash.
  1358.  * It is assumed you won't be stupid enough to pass a NULL
  1359.  * length string.
  1360.  *
  1361.  * eg: fixslash(pathstring);
  1362.  **********************************************************/
  1363. void fixslash(char *s)
  1364. {
  1365.      while(*s) s++;                       /* Move to EOS */
  1366.      if(*(--s) == '\\') return;          /* If Ok return */
  1367.     *(++s) = '\\';                       /* Else Add Slash */
  1368.     *(++s) = '\0';                       /* Terminate String */
  1369. }
  1370.  
  1371. /**********************************************************
  1372.  * Locate the Config.xxx file
  1373.  *
  1374.  * The parameter "node" should be declared globaly and
  1375.  * initialized to "1" if not otherwise declared either
  1376.  * by your own program or the "TASK" environment variable.
  1377.  * Note: It's up to you to check these two things.
  1378.  *
  1379.  * eg: if((pntr=findc(2))==NULL) is_error();
  1380.  **********************************************************/
  1381. char *findc(int node)
  1382. {
  1383.     char p[128];                                  /* Temp String Pointer */
  1384.     static char path[128];                        /* To store the location */
  1385.     char *s[] = {"CONFIG.1","CONFIG.EZY"};
  1386.  
  1387.     strcpy(p,getenv("EZY"));                      /* Get EZY Environment value */
  1388.     fixslash(p);                                  /* Make sure theres a backslash */
  1389.  
  1390.     if(node > 1 && node < 251) sprintf(s[0],"CONFIG.%d",node);
  1391.  
  1392.     if(strlen(p) > 1)                             /* If environment path set */
  1393.     {
  1394.         strcpy(path,p);
  1395.         strcat(path,s[0]);
  1396.         if(exists(path)) return(path);            /* Env Path + Config.xxx */
  1397.  
  1398.         strcpy(path,p);
  1399.         strcat(path,s[1]);
  1400.         if(exists(path)) return(path);            /* Env Path + Config.Ezy */
  1401.     }
  1402.  
  1403.     strcpy(path,s[0]);
  1404.     if(exists(path)) return(path);                /* Config.xxx in CurDir */
  1405.  
  1406.     strcpy(path,s[1]);
  1407.     if(exists(path)) return(path);                /* Config.Ezy in CurDir */
  1408.  
  1409.     return(NULL);                                 /* Unable to locate config.xx */
  1410. }
  1411.  
  1412. /**********************************************************
  1413.  * Check for a valid date
  1414.  *
  1415.  * Returns 1 if a valid date and 0 if not.
  1416.  *
  1417.  * eg: if(!checkdate(1992,1,1)) do_nothing();
  1418.  **********************************************************/
  1419. int checkdate(unsigned int yy, unsigned int mm, unsigned int dd)
  1420. {
  1421.     int days[] = {31,29,31,30,31,30,31,31,30,31,30,31};
  1422.  
  1423.     if( mm < 1 || mm > 12) return(0);                        /* Invalid Month */
  1424.     if( dd < 1 || dd > days[mm-1]) return(0);                /* Invalid Day */
  1425.     if(yy < 1900) return(0);                                 /* Your to Old */
  1426.     if(((yy%4) != 0) && (dd == 29) &&  (mm == 2)) return(0); /* Tryin to fool me */
  1427.  
  1428.     return(1);                                               /* Everything must be valid */
  1429. }
  1430.  
  1431. /**********************************************************
  1432.  * Convert a Date to an Int
  1433.  *
  1434.  * Returns the converted date on success or 65535 on failure.
  1435.  *
  1436.  * eg: intdate = dat2int(1992,1,1);
  1437.  **********************************************************/
  1438. unsigned int dat2int(unsigned int yy, unsigned int mm, unsigned int dd)
  1439. {
  1440.     unsigned int  tofield=0;
  1441.  
  1442.     if(!checkdate(yy,mm,dd) || yy < 1980 || yy > 2107) return(65535);
  1443.  
  1444.     tofield = dd-1;
  1445.     tofield = tofield + ((mm-1) << 5);
  1446.     tofield = tofield + ((yy-1980) << 9);
  1447.  
  1448.     return(tofield);
  1449. }
  1450.  
  1451. /**********************************************************
  1452.  * Convert an Int to a Date
  1453.  *
  1454.  * Returns the converted date in the variables yy,mm,dd
  1455.  * and a true false value in relation to the conversion.
  1456.  *
  1457.  * eg: if(!int2dat(intdate,&year,&mon,&day)) is_error();
  1458.  **********************************************************/
  1459. int int2dat(unsigned int dat, unsigned int *yy, unsigned int *mm, unsigned int *dd)
  1460. {
  1461.     unsigned int temp=dat;
  1462.  
  1463.     if(dat == 65535) return(0);          /* Invalid Date */
  1464.  
  1465.     *dd = (temp & 31) + 1;
  1466.     temp >>= 5;
  1467.     *mm = (temp & 15) + 1;
  1468.     temp >>= 4;
  1469.     *yy = (temp & 127) + 1980;
  1470.     return(1);                         /* Conversion OK */
  1471. }
  1472.  
  1473. /**********************************************************
  1474.  * Convert a Date and Time to a Long (DOS Packed DateTime)
  1475.  *
  1476.  * Returns the converted date on success or 0 on failure.
  1477.  *
  1478.  * eg: longdate = dat2int(1992,1,1,12,53,50);
  1479.  **********************************************************/
  1480. unsigned long dat2long(unsigned int year, unsigned int month, unsigned int day,
  1481.                        unsigned int hour, unsigned int min,   unsigned int sec)
  1482. {
  1483.     unsigned long  todatefield,totimefield;
  1484.  
  1485.     if(!checkdate(year,month,day) || year < 1980 || year > 2107) return(0);
  1486.  
  1487.     todatefield = day;
  1488.     todatefield = tofield + ((month) << 5);
  1489.     todatefield = tofield + ((year-1980) << 9);
  1490.  
  1491.     totimefield = (sec >> 1) + (min << 5) + (hour << 12);
  1492.  
  1493.     totimefield = totimefield + (todatefield << 16);
  1494.  
  1495.     return(totimefield);
  1496. }
  1497.  
  1498.